package com.example.clientend.controller;

import com.alibaba.fastjson.JSONObject;
import com.example.clientend.service.BatFileHandlerService;
import com.example.clientend.service.InfoGetterService;
import com.example.clientend.service.StringMatcherService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 被控端处理主控端远控请求的Controller
 * (主控端现已更改为通过MQTT发送远控相关请求，该控制器暂时停用)
 */
@RestController
@Slf4j
public class RequestController {
    @Autowired
    BatFileHandlerService batFileHandlerService;
    @Autowired
    StringMatcherService stringMatcherService;
    @Autowired
    InfoGetterService infoGetterService;

    /**
     * 调用向日葵SDK注册远控服务
     * @return
     */
    @PostMapping("/installService")
    public JSONObject installService(){
        log.info("接收到主控端的远控请求，开始注册远控服务并生成对话信息。");
        try {
            batFileHandlerService.installService();
            log.info("远控服务注册成功！");
            // 线程等待1000ms，等待远控服务注册完成并输出会话信息到log文件中
            Thread.sleep(1000);
            // 读取生成的会话信息，截取远控address和cid
            JSONObject sessionInfo = stringMatcherService.readInfo();
            // 校验address和cid是否正确
            if (stringMatcherService.infoCheck(sessionInfo)){
                log.info("成功生成远控会话信息并推送至主控端！远控会话信息：" + sessionInfo);
                return sessionInfo;
            } else {
                log.info("远控会话生成失败！");
                // 若校验失败则执行注销服务操作，确保本机处于未注册服务状态
                batFileHandlerService.uninstallService();
                throw new RuntimeException("远控会话生成失败！");
            }
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 调用向日葵SDK注销远控服务
     * @return
     */
    @PostMapping("/uninstallService")
    public String uninstallService(){
        log.info("主控端远控结束，进行远控服务注销。");
        try {
            // 调用SDK解除远控服务
            batFileHandlerService.uninstallService();
            // 线程等待500ms，等待远控服务注销完成并输出信息到log文件中
            Thread.sleep(500);
            // 清除会话信息输出日志
            batFileHandlerService.clearLog();
            log.info("远控服务注销成功！");
            return "远控服务注销成功！";
        }catch (Exception e){
            e.printStackTrace();
            log.info("远控服务注销失败！");
            return "远控服务注销失败！";
        }

    }
    
}
